001 /* 002 * Copyright 2005 Stephen J. McConnell 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 013 * implied. 014 * 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package net.dpml.library; 020 021 import java.io.File; 022 023 import net.dpml.library.info.Scope; 024 import net.dpml.library.info.ResourceDirective.Classifier; 025 026 import net.dpml.transit.Artifact; 027 028 import net.dpml.lang.Category; 029 import net.dpml.lang.Version; 030 031 import net.dpml.util.Resolver; 032 033 /** 034 * The Resource interface describes infomation about a published resource. 035 * 036 * @author <a href="http://www.dpml.net">The Digital Product Meta Library</a> 037 * @version 1.0.0 038 */ 039 public interface Resource extends Dictionary, Resolver 040 { 041 /** 042 * Return the singleton library. 043 * @return the library 044 */ 045 Library getLibrary(); 046 047 /** 048 * Return the name of the resource. 049 * @return the resource name 050 */ 051 String getName(); 052 053 /** 054 * Return the resource version. 055 * @return the version 056 */ 057 String getVersion(); 058 059 /** 060 * Return the statutory resource version. 061 * @return the version 062 */ 063 String getStatutoryVersion(); 064 065 /** 066 * Return the decimal version. 067 * @return the version 068 */ 069 Version getDecimalVersion(); 070 071 /** 072 * Return the fully qualified path to the resource. 073 * @return the path 074 */ 075 String getResourcePath(); 076 077 /** 078 * Return the basedir for this resource. 079 * @return the base directory (possibly null) 080 */ 081 File getBaseDir(); 082 083 /** 084 * Return the info block. 085 * @return the info block 086 */ 087 Info getInfo(); 088 089 /** 090 * Return the resource classifier. 091 * @return the classifier (LOCAL, EXTERNAL or ANONYMOUS) 092 */ 093 Classifier getClassifier(); 094 095 /** 096 * Return the expanded array of types associated with the resource. 097 * The returned array is a function of the types declared by a resource 098 * expanded relative to any types implied by processor dependencies. 099 * @return the type array 100 */ 101 Type[] getTypes(); 102 103 /** 104 * Test if this resource is associated with a type of the supplied name. 105 * @param type the type id 106 * @return TRUE if this resource produces an artifact of the supplied type 107 */ 108 boolean isa( String type ); 109 110 /** 111 * Return a resource type relative to a supplied type id. 112 * @param id the type name to retrieve 113 * @return the type instance 114 */ 115 Type getType( String id ); 116 117 /** 118 * Construct an artifact for the supplied type. 119 * @param type the resource type id 120 * @return the artifact 121 */ 122 Artifact getArtifact( String type ); 123 124 /** 125 * Construct an unversion link artifact for the supplied type. 126 * @param type the resource type id 127 * @return the link artifact 128 */ 129 Artifact getLinkArtifact( String type ); 130 131 /** 132 * Return the enclosing parent module. 133 * @return the enclosing module of null if this a top-level module. 134 */ 135 Module getParent(); 136 137 /** 138 * Return an array of resource that are providers to this resource. 139 * @param scope the operational scope 140 * @param expand if true include transitive dependencies 141 * @param sort if true the array will sorted relative to dependencies 142 * @return the resource providers 143 */ 144 Resource[] getProviders( Scope scope, boolean expand, boolean sort ); 145 146 /** 147 * Return an array of resource that are providers to this resource. If 148 * the supplied scope is BUILD the returned resource array is equivalent 149 * <src>getProviders( Scope.BUILD, .. )</src>. If the scope is RUNTIME 150 * the returned resource array includes BUILD and RUNTIME resources. If 151 * the scope is TEST the returned array includes BUILD, RUNTIME and TEST 152 * resources. 153 * @param scope the scope of aggregation to be applied to the selection 154 * @param expand if TRUE include transitive dependencies 155 * @param sort if true the array will sorted relative to dependencies 156 * @return the resource providers 157 */ 158 Resource[] getAggregatedProviders( Scope scope, boolean expand, boolean sort ); 159 160 /** 161 * Return a sorted and filtered array of providers. Resources not declaring 162 * the "jar" type as a produced type are excluded from selection. The 163 * resource array will include transitive dependencies. The method is 164 * suitable for the construction of build and test phase classloaders. 165 * 166 * @param scope the aggregation scope 167 * @return the scoped resource chain 168 */ 169 Resource[] getClasspathProviders( Scope scope ); 170 171 /** 172 * Return an array of runtime providers filtered relative to a supplied 173 * classloading category. Resources not declaring the "jar" type as a 174 * produced type are excluded from selection. The resource array returned 175 * from this operation is a sorted transitive sequence excluding all 176 * resource references by any category higher than the supplied category. 177 * This method is typically used to construct information suitable for 178 * the gerneration of plugin metadata. 179 * 180 * @param category the classloader category 181 * @return the category scoped resource chain 182 */ 183 Resource[] getClasspathProviders( Category category ); 184 185 /** 186 * Return an array of resources that are consumers of this resource. 187 * @param expand if true the returned array includes consumers associated 188 * through transitive dependency relationships, otherwise the array is 189 * limited to direct consumers 190 * @param sort if true the array is sorted relative to depenency relationships 191 * @return the array of consumer projects 192 */ 193 Resource[] getConsumers( boolean expand, boolean sort ); 194 195 /** 196 * Return an array of filters associated with the resource. 197 * @return the array of filters 198 */ 199 Filter[] getFilters(); 200 201 /** 202 * Return a filename using the layout strategy employed by the cache. 203 * @param id the artifact type 204 * @return the filename 205 */ 206 String getLayoutPath( String id ); 207 208 /** 209 * Return the array of production data. 210 * @return the associated production data 211 */ 212 Data[] getData(); 213 }